package com.hanlin.leetcode;

import com.hanlin.day03.Alternator;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;

/**
 * 给定一个偶数长度的数组，其中不同的数字代表着不同种类的糖果，每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。
 * 返回妹妹可以获得的最大糖果的种类数。
 * <p>
 * 示例 1:
 * <p>
 * 输入: candies = [1,1,2,2,3,3]
 * 输出: 3
 * 解析: 一共有三种种类的糖果，每一种都有两个。
 * 最优分配方案：妹妹获得[1,2,3],弟弟也获得[1,2,3]。这样使妹妹获得糖果的种类数最多。
 * 示例 2 :
 * <p>
 * 输入: candies = [1,1,2,3]
 * 输出: 2
 * 解析: 妹妹获得糖果[2,3],弟弟获得糖果[1,1]，妹妹有两种不同的糖果，弟弟只有一种。这样使得妹妹可以获得的糖果种类数最多。
 * 注意:
 * <p>
 * 数组的长度为[2, 10,000]，并且确定为偶数。
 * 数组中数字的大小在范围[-100,000, 100,000]内。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/distribute-candies
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @Author: hl.yuan
 * @Date: 2021/6/3 14:18
 */
public class PointsOfCandy {


    public static void main(String[] args) {
        // 生成0 到 100000之类的随机数
        int data =  (int)(Math.random() * 100001);
        // 生成[-100000,100000]随机数
        int maxValue = Math.random() > 0.5 ? data : -data;
        // 生成[2 ，10,000]
        int maxIndex = (int)( Math.random() * 5000 + 1) * 2;
        // 随机生成数组
        int[] array = Alternator.generateArray(maxValue, maxIndex);
//        int[] array = {1,1,2,2,3,4};

        // set集合，不允许有重复的。
        Set<Integer> set = new HashSet<>();
        for (int i : array) {
            set.add(i);
        }
        // 拿到糖果的种类
        int size = set.size();
        // 糖果的数量
        int arrayLength = array.length;

        // 打印数组
        Alternator.printArray(array);
        // 女孩得到的糖果数，最多是n/2 其中n为糖果的数量，当我们的糖果的类型小于n/2的时候，我们为了保证小女孩的不同糖果类型的数量，所以我们需要把所有类型的
        // 的糖果都给一份给女孩。
        System.out.println("糖果类型："+size+" 糖果数量："+arrayLength);
        System.out.println("小女孩分得:"+Math.min(size,arrayLength/2));


    }

}
